package com.flying;

import java.util.Arrays;

/**
 * @author 刘鹏飞
 * @Classname TestBubbleSort
 * @Date 2024/12/16 20:38
 * @Created by 刘鹏飞
 * @Description 测试, 冒泡排序及优化
 */
public class TestBubbleSort {


    public static void main(String[] args) {


        int[] values = {3, 1, 6, 8, 9, 0, 7, 4,1, 6, 8, 9, 0, 7, 4, 5, 2};
        System.out.println("原始顺序：" + Arrays.toString(values));

//        bubbleSort(values);
//        bubbleSort1(values);
        bubbleSort2(values);








    }

    private static void bubbleSort(int[] values) {
        int once=0;
        for (int i = 0; i < values.length-1; i++) { // 外循环控制趟数
            for (int j = 0; j < values.length - 1; j++) { // 内循环控制比较次数

                if (values[j]>values[j+1]){
                    once++;
                    int temp=values[j];
                    values[j]=values[j+1];
                    values[j+1]=temp;
                }
            }
            System.out.println((i+1)+"趟排序："+Arrays.toString(values));
            
        }

        
    }


    /**
     * 优化比较次数
     * @param values
     */
    private static void bubbleSort1(int[] values) {
        int once=0;
        for (int i = 0; i < values.length-1; i++) { // 外循环控制趟数
            // 每一趟比较结束都会产生一个最大数,可以不用进行比较,这个产生的最大数的个数就是外循环的趟数
            for (int j = 0; j < values.length - 1-i; j++) { // 内循环控制比较次数

                if (values[j]>values[j+1]){
                    once++;
                    int temp=values[j];
                    values[j]=values[j+1];
                    values[j+1]=temp;
                }
            }
            System.out.println((i+1)+"趟排序："+Arrays.toString(values));

        }



    }

    /**
     * 优化趟数
     * @param values
     */
    private static void bubbleSort2(int[] values) {

        int once=0;
        for (int i = 0; i < values.length-1; i++) { // 外循环控制趟数
            boolean flag=true;
            // 每一趟比较结束都会产生一个最大数,可以不用进行比较,这个产生的最大数的个数就是外循环的趟数
            for (int j = 0; j < values.length - 1-i; j++) { // 内循环控制比较次数

                if (values[j]>values[j+1]){
                    flag=false;
                    once++;
                    int temp=values[j];
                    values[j]=values[j+1];
                    values[j+1]=temp;
                }
            }
            if (flag){
                System.out.println((i+1)+"趟排序："+Arrays.toString(values));
                return;
            }
            System.out.println((i+1)+"趟排序："+Arrays.toString(values));
        }


    }

}
